#include "ogl/gut/Shader.h"
#include "ogl/gut/Dictionary.h"
#include "imgui/Editor.h"

using namespace Ogl::Gut;

template <>
bool ImGui::Editor::Edit(const std::string& label, Ogl::Gut::ShaderDesc1& inst)
{
    int index = 0;

    if (TreeNode(label.c_str(), inst.m_BitFlag, index++))
    {
        InputMultiString("Vert code", inst.m_VertCode, 10);
        InputMultiString("Frag code", inst.m_FragCode, 10);
        TreePop();
    }

    return false;
}

template <>
bool ImGui::Editor::Edit(const std::string& label, Ogl::Gut::ShaderDesc2& inst)
{
    int index = 0;

    if (TreeNode(label.c_str(), inst.m_BitFlag, index++))
    {
        EditInst<std::string>("Vert File ", inst.m_VertFile);
        EditInst<std::string>("Frag File ", inst.m_FragFile);
        TreePop();
    }
    return false;
}

template <>
bool ImGui::Editor::Edit(const std::string& label, Ogl::Gut::ShaderDesc& inst)
{
    int index = 0;

    if (TreeNode(label.c_str(), inst.m_BitFlag, index++))
    {

        ComboInst<ShaderDescType, ShaderDescTypeDesc>(label, Dictionary::m_ShaderDescTypeDesc, inst.m_Type);
        EditInst<ShaderDesc1>("glsl code", inst.m_Desc1);

        EditInst<ShaderDesc2>("glsl path", inst.m_Desc2);

        TreePop();
    }

    return false;
}



template <>
bool ImGui::Editor::Edit(const std::string& label, Ogl::Gut::Shader& inst)
{
    int index = 0;
    if (TreeNode(label.c_str(), inst.m_BitFlag, index++))
    {
        EditInst<Ogl::Gut::ShaderDesc>("Desc", inst.m_Desc);
        EditInst<unsigned int>("shader Id", inst.ID);
        ImGui::TreePop();
    }
    return false;
}

